DUA3:<000000>PASCAL037.RELEASE_NOTES;14

















                    VAX PASCAL V3.7 Release Notes

                    VAX PASCAL V3.7 Release Notes

                            14 March 1988

                            14 March 1988







     This document contains information about new features in VAX
     PASCAL V3.7, differences between V3.7 and previous versions,
     corrections included in VAX PASCAL V3.7, and  other  topics.
     This  file  is  of  interest  to  both system management and
     application programmers.








                                   CONTENTS



CHAPTER 1       VAX PASCAL V3.7 RELEASE NOTES

        1.1     OVERVIEW OF VAX PASCAL V3.7  . . . . . . . . . . . 1-1
        1.2     COMPATIBILITY NOTES  . . . . . . . . . . . . . . . 1-1
        1.3     PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY 
                ATTRIBUTES . . . . . . . . . . . . . . . . . . . . 1-1
        1.4     STARLET.PAS INSTALLATION DEPENDENCY  . . . . . . . 1-2
        1.5     KNOWN RESTRICTIONS . . . . . . . . . . . . . . . . 1-2
        1.5.1     Blank Padding Of PACKED ARRAY OF CHAR Value 
                  Parameters . . . . . . . . . . . . . . . . . . . 1-2
        1.5.2     String Expressions As Actual Value Parameters  . 1-3
        1.5.3     Passing File Buffer Variables  . . . . . . . . . 1-3
        1.5.4     Non-printable Characters In Compile-time 
                  Expressions  . . . . . . . . . . . . . . . . . . 1-3
        1.5.5     Using The ARGUMENT Routine With VAR Parameters . 1-4
        1.5.6     Maximum Number Of Environment Files Allowed  . . 1-4


CHAPTER 2       VAX PASCAL V3.7 MAINTENANCE FIXES












































                              CHAPTER 1

                              CHAPTER 1

                    VAX PASCAL V3.7 RELEASE NOTES

                    VAX PASCAL V3.7 RELEASE NOTES



1.1  OVERVIEW OF VAX PASCAL V3.7

VAX  PASCAL  V3.7  contains  only  maintenance  corrections.   No  new
functionality is provided.



1.2  COMPATIBILITY NOTES

There have been no source incompatibilities added to VAX PASCAL  V3.7.
All valid programs will continue to work as expected.

The "SYNPERIOD, Syntax: '.' expected" error message generated  by  the
VAX  PASCAL  compiler  has  been  changed  from  a warning-level to an
error-level.  There have been several reports of  confusion  resulting
from  programs that had unbalanced END keywords and were compiled with
/NOWARNINGS.  These programs didn't produce any visible  diagnositics.
By  changing  the  severity  from  warning  to  error, the /NOWARNINGS
qualifier will not prevent the diagnostic from being issued.

The VAX SCA source code analyzer files produced  by  VAX  PASCAL  V3.7
with  the  /ANALYSIS_DATA  qualifier  require VAX SCA V1.1 or greater.
The source code analyzer files will not work correctly  with  VAX  SCA
V1.0.



1.3  PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY ATTRIBUTES

When an existing indexed file is opened, the Run-Time Library compares
the  keys  in  the  file  against  the KEY attributes specified in the
program.  If no KEY attribute was specified for the corresponding  key
in  the  indexed  file,  then  the comparison is bypassed and the open
continues.   The  Run-Time  Library  compares  the  position  and  the
datatype  of the file's keys against the KEY attributes specified.  If
the KEY attribute explicitly specifies a collating sequence (ASCENDING
or  DESCENDING) then the specified sequence must match that of the key


                                 1-1





















                    VAX PASCAL V3.7 RELEASE NOTES

                    VAX PASCAL V3.7 RELEASE NOTES


in the file.  If no sequence is  specified  then  either  sequence  is
allowed.  The CHANGES and DUPLICATES options are not checked.



1.4  STARLET.PAS INSTALLATION DEPENDENCY

The VAX PASCAL V3.7 kit does not contain a new STARLET.PAS  kit.   The
existing  kit,  PASSTR034,  is  only  provided  to new customers or on
magnetic tape media.  While the STARLET.PAS kit was  not  updated,  we
strongly  suggest that you reinstall PASSTR after each VAX/VMS upgrade
or update.  This is because the STARLET.PAS file that is built by  the
PASSTR034  facility is built from a file of definitions shipped on the
VAX/VMS kit.  This file is SYS$LIBRARY:STARLETSD.TLB.   This  file  is
owned  and  maintained  by  the  VAX/VMS  group  and may be updated by
VAX/VMS releases.  After each VAX/VMS update or upgrade,  reinstalling
STARLET.PAS  allows you to get any corrections or enhancements made to
SYS$LIBRARY:STARLETSD.TLB.



1.5  KNOWN RESTRICTIONS

This section includes all known restrictions in the  VAX  PASCAL  V3.7
compiler.



1.5.1  Blank Padding Of PACKED ARRAY OF CHAR Value Parameters

A  string  parameter  must  be  structurally   compatible   with   its
corresponding  formal  parameter.   The  VAX  PASCAL compiler will not
blank pad a fixed length character string expression  with  blanks  to
match  the  formal  declaration.   Also  VAX PASCAL will not blank pad
default values for such string parameters.  For example, the following
program segment will produce a compile-time error:

   TYPE STR40 = PACKED ARRAY [1..40] OF CHAR;

   PROCEDURE PASS_STR40( P : STR40 );
      BEGIN
      END;

   BEGIN
   PASS_STR40('Shorter than 40 chars');
   END.








                                 1-2





















                    VAX PASCAL V3.7 RELEASE NOTES

                    VAX PASCAL V3.7 RELEASE NOTES


1.5.2  String Expressions As Actual Value Parameters

If several formal value parameters are declared in  the  same  section
and  have  the  same conformant packed array schema, all corresponding
actual parameters must have the same bounds at run-time.  For example:

   PROCEDURE P( A,B : PACKED ARRAY [L..U:INTEGER] OF CHAR );

In a call to P, the actual parameters passed to  A  and  B  must  have
identical  string  bounds.  However, due to an error in the VAX PASCAL
compiler, the bounds of  these  parameters  are  not  checked.   If  a
program  calls  P  with  two  character-string parameters of different
lengths, an error will not be signaled and the bound identifiers L and
U will not correctly describe the bounds of the formal parameter B.

This restriction applies only to string expressions  passed  to  value
conformant  PACKED  ARRAY  OF CHAR parameters.  For all other types of
parameters, bounds checking is done during compile-time.



1.5.3  Passing File Buffer Variables

When the buffer variable of a file is passed as a VAR  parameter,  the
allocation  size  of  the  formal VAR parameter must match that of the
components of the file.  Failure to do so will result in  an  Internal
Compiler Error.  For example:

   PROGRAM A;
   VAR
      F : PACKED FILE OF 0..65535;
      G : FILE OF [WORD] 0..65535;

   PROCEDURE P( VAR I : INTEGER ); EXTERNAL;

   BEGIN
   P(F^); { causes an Internal Compiler Error }
   P(G^); { causes an Internal Compiler Error }
   END.




1.5.4  Non-printable Characters In Compile-time Expressions

The extended syntax for imbedding non-printable characters  in  string
literals  may  yield  incorrect  results  when  used  in  compile-time
expressions.  For example:

   PROGRAM A(OUTPUT);

   CONST BOOL = 'BELL'(7) = 'BELL'(7)'CHAR';


                                 1-3





















                    VAX PASCAL V3.7 RELEASE NOTES

                    VAX PASCAL V3.7 RELEASE NOTES


   VAR STRING : PACKED ARRAY [1..32] OF CHAR :=
                'STRING WITH A BELL'(7)' CHARACTER';

   BEGIN
   WRITELN(BOOL,' ',STRING);
   END.

The above program will print "TRUE" for BOOL  and  garbage  characters
for  STRING.   As a workaround, you can use run-time expressions.  For
example:

   PROGRAM A(OUTPUT);

   VAR BOOL : BOOLEAN;
       STRING : PACKED ARRAY [1..32] OF CHAR;

   BEGIN
   BOOL := 'BELL'(7) = 'BELL'(7)'CHAR';
   STRING := 'STRING WITH A BELL'(7)' CHARACTER';
   WRITELN(BOOL,' ',STRING);
   END.

We expect to lift this restriction in a future release of VAX PASCAL.



1.5.5  Using The ARGUMENT Routine With VAR Parameters

The ARGUMENT builtin routine cannot be used on the left-hand  side  of
an  assignment  statement.   However,  you  can  still assign into VAR
parameters with the LIST attribute by using the IADDRESS builtin.  For
example:

   PROCEDURE A(VAR P : [LIST] INTEGER);
     VAR I,PTR : ^INTEGER;
      BEGIN
      FOR I := 1 TO ARGUMENT_LIST_LENGTH(P) DO
         BEGIN
         PTR  := IADDRESS(ARGUMENT(P,I));
         PTR^ := 42;
         END;
      END;

We will consider further enhancements to the  ARGUMENT  routine  in  a
future release of VAX PASCAL.



1.5.6  Maximum Number Of Environment Files Allowed

The  maximum  number  of  environment  files  allowed  in   a   single
compilation  unit  is 128.  Using more than 128 environment files will


                                 1-4





















                    VAX PASCAL V3.7 RELEASE NOTES

                    VAX PASCAL V3.7 RELEASE NOTES


result in an Internal Compiler Error.  We will consider increasing the
maximum  number of environment allowed and adding an appropriate error
message in a future release of VAX PASCAL.



















































                                 1-5
































                              CHAPTER 2

                              CHAPTER 2

                  VAX PASCAL V3.7 MAINTENANCE FIXES

                  VAX PASCAL V3.7 MAINTENANCE FIXES




This chapter describes  all  the  changes  for  the  VAX  PASCAL  V3.7
release.



      o  The compiler would  occasionally  get  an  Internal  Compiler
         Error during Tree Construction when the procedure integration
         optimization was enabled and a callable copy of a routine was
         generated   (because   of   GLOBAL   attribute,   ENVIRONMENT
         attribute, or the compiler's  expansion  heuristic)  and  the
         routine  was  later  expanded  into  another  routine.   This
         problem has been corrected.


      o  (SPR ICA-6429)  The  compiler  would  occasionally   generate
         incorrect  code  when optimizations were enabled for a source
         module containing  nested  WHILE  statements  with  identical
         calls to EOF or EOLN.  This problem has been corrected.


      o  The compiler would occasionally generate an Internal Compiler
         Error  during Profit Analysis when optimizations were enabled
         for a source module containing common sub-expressions  within
         nested looping constructs.


      o  The compiler would generate an Internal Compiler Error during
         Context  Analysis  when  an external value variable reference
         was typecast to a structured type.  The correct code  is  now
         generated.


      o  (SPR ICA-8691)  When   compiling   with   subrange   checking
         enabled,  assignments  to  set  variables sometimes generated
         superfluous instructions.  This problem has been fixed.



                                 2-1





















                  VAX PASCAL V3.7 MAINTENANCE FIXES

                  VAX PASCAL V3.7 MAINTENANCE FIXES


      o  External pointer variables occasionally caused large  amounts
         of stack space to be allocated.  This problem has been fixed.


      o  (SPR ICA-9880)  An  Internal  Compiler  Error  during   Final
         occasionally occurred when compiling routines containing very
         large CASE  statements  and  the  machine  code  listing  was
         enabled  with /LIST and /MACHINE.  This would occur if any of
         the case-element displacements was greater  than  32  KBytes.
         This problem has been fixed.


      o  (SPR ICA-10185)  The compiler would go into an infinite  loop
         if  a  constant-expression  contained  a  math  function that
         referenced a reserved floating  operand.   This  problem  has
         been fixed.


      o  (SPR ICA-9835)  An  Internal  Compiler  Error   during   Flow
         Analysis   was  generated  when  optimizations  were  enabled
         compiling a  program  containing  an  IF-THEN-ELSE  statement
         similar to the following:

              FOR i := 1 TO 10 DO
                 IF Bool1
                 THEN
                   BEGIN
                   IF Bool2
                     x := arr1[i];
                   WRITELN( arr1[i] );
                   WRITELN( arr2[i] );
                   END
                 ELSE
                   WRITELN( arr2[i] );

         Where arr1 and arr2 were of the same type.  This problem  has
         been corrected.


      o  (SPR ICA-10789)  The compiler would generate a  bad  VAX  SCA
         source analysis file when the program contained a label and a
         record field of the same name.  The resulting file would  not
         load correctly into a VAX SCA library.  This problem has been
         corrected.


      o  (SPR ICA-9447)  Incorrect   code   occasionally   would    be
         generated  for  an  IF-THEN-ELSE  statment  within  a looping
         construct which contained a  common  array  index  which  was
         modified  within the loop.  The compiler did not realize that
         the value of the  index  had  changed  within  the  loop  and
         neglected to recalculate the array address for each iteration


                                 2-2





















                  VAX PASCAL V3.7 MAINTENANCE FIXES

                  VAX PASCAL V3.7 MAINTENANCE FIXES


         of the loop.  This problem has been corrected.


      o  When using the  %IMMED  foreign  mechanism  specifier  on  an
         actual parameter of type REAL, the compiler would incorrectly
         convert the value to INTEGER before passing it to the routine
         being called.  This problem has been corrected.


      o  In a CASE statement label, the lower bound of a  range  could
         not  be  a  compile-time-constant  expression in parentheses.
         This problem has been fixed.


      o  An Internal Compiler Error would occur during Source Analysis
         or  Flow  Analysis  if  a CASE statement contained only empty
         case-elements.  This problem has  been  fixed.   The  correct
         syntax error is now issued.


      o  The message "SYNPERIOD, Syntax:  '.' expected" was issued  as
         either  a  warning  message  or an error message based on the
         context.  It is now always issued  as  an  error  message  to
         prevent  syntax  errors  from being overlooked when compiling
         with /NOWARNINGS.


      o  Incorrect code was  occasionally  generated  when  the  INDEX
         predeclared  function  was used as a CASE selector expression
         and the pattern string used the concatenation operator.  This
         problem has been fixed and the correct code is now generated.


      o  An incorrect file variable was generated  when  inheriting  a
         record  whose fields used the V3.4 key attribute enhancements
         (CHANGES,  DUPLICATES,  ASCENDING,  or   DESCENDING).    This
         problem has been corrected.


      o  The changes made to VAX  PASCAL  V3.6  to  improve  the  code
         quality  problem  reported  in  SPR ICA-8693 have been backed
         out.  These changes caused incorrect behaviour in some cases.
         SPR ICA-8693 will be re-addressed in a future release.


      o  (SPR ICA-11864)  When the ZERO builtin function was  used  to
         statically  initialize a record variable with a variant-part,
         the variant tag was incorrect initialized.  This problem  has
         been fixed, the tag is now set to zero.





                                 2-3





















                  VAX PASCAL V3.7 MAINTENANCE FIXES

                  VAX PASCAL V3.7 MAINTENANCE FIXES


      o  (SPR ICA-11233)  The    compiler    occasionally    generated
         incorrect  code  for string comparisions when one operand was
           n

         (4n)+3 bytes long and had to be blank  padded  to  match  the
         size of the other operand.  This problem has been fixed.


      o  (SPR ICA-11248)  The    compiler    occasionally    generated
         incorrect code for modules containing backward GOTOs within a
         conditional statement  which  was  nested  within  a  looping
         construct.  This problem has been fixed.


      o  The  compiler  occasionally  generated  incorrect  code   for
         routines  with value parameters having the TRUNCATE attribute
         which are used within nested routines.  This problem has been
         fixed.


      o  The compiler did not perform the compile-time folding of  the
         set  difference  operator  correctly.   This problem has been
         fixed.


      o  (SPR ICA-13372)  The    compiler    occasionally    generated
         incorrect  code  when  a  common  subexpression  using  a set
         constructor was used in an IF_THEN_ELSE statement  which  was
         nested  within  a  looping  construct.  This problem has been
         fixed and correct code is generated.


      o  (SPR ICA-7928)The compiler occasionally generated an Internal
         Compiler  Error  during  Name  Packing when optimizations are
         enabled for a module containing common array  subscripts  for
         different  array  types  within  both  the  case selector and
         subsequent case elements.  This problem has been fixed.


      o  An  Internal  Compiler  Error  during  Source   Listing   was
         occasionally  generated  when compiling with /CROSS_REFERENCE
         when the PSECT attribute was applied to  a  type  definition.
         This problem has been fixed.


      o  An Internal Compiler Error during Tree Construction  occurred
         if  the  ARGUMENT  or ARGUMENT_LIST_LENGTH buildins were used
         with a variable that was not a parameter.  An  error  message
         is now produced.







                                 2-4

